package cn.ljw.mybatis;

import java.io.Closeable;
import java.sql.Connection;
import java.util.List;
import java.util.Map;

/**
 * @author 一朝风月
 * @date 2024/9/21 19:41
 * @Code 面向注解面向卿，终无解释再无你
 * @description SqlSession属于Mybatis主要接口，用于执行sql语句和事务管理
 */
public interface SqlSession extends Closeable {
    <T> T getMapper(Class<T> type);

    Connection getConnection();
    <T> T selectOne(String statement);//单条select
    <T> T selectOne(String statement, Object parameter);//单条select带参数
    <E> List<E>  selectList(String statement);//列表查询
    <E> List<E> selectList(String statement, Object parameter);//列表查询带参数
    <E>List<E>selectList(String statement, Object parameter, RowBounds rowBounds);//分页列表查询携带参数
    <K, V> Map<K, V> selectMap(String statement, String mapKey); //将查询结果以map形式返回

    <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey);//将查询结果以map形式返回带参数

    <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds);//将查询结果以map形式返回带参数和分页
    <T> Cursor<T> selectCursor(String statement);//游标查询

    <T> Cursor<T> selectCursor(String statement, Object parameter);//游标查询带参数

    <T> Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds);//游标查询带参数和分页
    //b
    int insert(String statement);//插入
    int insert(String statement, Object parameter);//插入带参数
    int update(String statement);//更新
    int update(String statement, Object parameter);//更新带参数
    int delete(String statement);//删除
    int delete(String statement, Object parameter);//删除带参数

    /**
     * 不携带返回类型的Crud操作
     * @Author 一朝风月
     * @param statement
     */

    void select(String statement, Object parameter, ResultHandler handler);

    void select(String statement, ResultHandler handler);

    void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler);

    void commit();//提交事务

    void commit(boolean force);//强制提交事务

    void rollback();//回滚事务
    void rollback(boolean force);//强制回滚事务
    void close();//关闭连接
    void clearCache();//清除缓存
//    List<BatchResult> flushStatements();//批量结果提交


}
